#include <cstdio>
#include <unistd.h>
#include <fcntl.h>
#include <sys/timerfd.h>

int main()
{
    int timerfd = timerfd_create(CLOCK_MONOTONIC, 0);
    // monotonic 单调的 (逐秒单调递增) CLOCK_MONOTONIC是以OS启动那一刻作为基准值逐秒递增，并不受系统时间realtime是否被modify的影响
    if (timerfd < 0)
    {
        perror("timerfd_create error!");
        return -1;
    }
    struct itimerspec itime;
    itime.it_value.tv_sec = 5;//第一次超时时间设置为5s后
    itime.it_value.tv_nsec = 0;
    itime.it_interval.tv_sec = 1;//第一次超时之后，每隔1s就算作一次超时
    itime.it_interval.tv_nsec = 0;
    timerfd_settime(timerfd, 0, &itime, NULL);
    sleep(10);

    u_int64_t timeout;//一次读取的数据大小一定要是8字节
    int ret = read(timerfd, &timeout, 8);
    printf("超时 %ld 次\n", timeout);

    close(timerfd);
    return 0;
}